package com.jiangyao.controller;


import com.jiangyao.common.ApiResult;
import com.jiangyao.common.enums.IndustryEnum;
import com.jiangyao.model.dto.backend.CategoryDTO;
import com.jiangyao.model.dto.backend.CategoryListPageDTO;
import com.jiangyao.model.entity.Category;
import com.jiangyao.model.vo.backend.CategoryCountVO;
import com.jiangyao.model.vo.backend.IndustryVO;
import com.jiangyao.service.CategoryService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;

/**
 * <p>
 * 分类信息 前端控制器
 * </p>
 *
 * @author yangyongchuan
 * @since 2020-08-17
 */
@Api(tags = "数据分类管理")
@RestController
@RequestMapping("/category")
public class CategoryController extends BaseController {

	@Autowired
	private CategoryService categoryService;

	/**
	 * 获取数据分类列表
	 *
	 * @param listPageDTO 列表DTO
	 * @return 结果
	 */
	@ApiOperation(value = "获取数据分类列表")
	@PostMapping("/list")
	public ApiResult<Category> getListPage(@Validated({CategoryListPageDTO.ListPage.class}) @RequestBody CategoryListPageDTO listPageDTO) {
		return ApiResult.success(categoryService.getListPage(listPageDTO));
	}

	/**
	 * 增加数据分类
	 *
	 * @param categoryDTO 增加DTO
	 * @return 结果
	 */
	@ApiOperation(value = "增加数据分类")
	@PostMapping("/add")
	public ApiResult<String> add(@Validated({CategoryDTO.Add.class}) @RequestBody CategoryDTO categoryDTO) {
		categoryService.add(categoryDTO);
		return new ApiResult<>("ok");
	}

	/**
	 * 编辑数据分类
	 *
	 * @param categoryDTO 编辑DTO
	 * @return 结果
	 */
	@ApiOperation(value = "编辑数据分类")
	@PostMapping("/edit")
	public ApiResult<String> edit(@Validated({CategoryDTO.Edit.class}) @RequestBody CategoryDTO categoryDTO) {
		categoryService.edit(categoryDTO);
		return new ApiResult<>("ok");
	}

	/**
	 * 删除数据分类
	 *
	 * @param categoryDTO 删除DTO
	 * @return 结果
	 */
	@ApiOperation(value = "删除数据分类", notes = "必填字段：id")
	@PostMapping("/del")
	public ApiResult<String> del(@Validated({CategoryDTO.Delete.class}) @RequestBody CategoryDTO categoryDTO) {
		categoryService.del(categoryDTO);
		return new ApiResult<>("ok");
	}

	/**
	 * 根据类型获取数据分类
	 *
	 * @param categoryDTO DTO
	 * @return 结果
	 */
	@ApiOperation(value = "根据类型获取数据分类", notes = "必填字段：type")
	@PostMapping("/listForSelect")
	public ApiResult<Category> listForSelect(@RequestBody CategoryDTO categoryDTO) {
		return ApiResult.success(categoryService.listForSelect(categoryDTO));
	}

	/**
	 * 根据类型获取数据分类统计
	 *
	 * @param categoryDTO DTO
	 * @return 结果
	 */
	@ApiOperation(value = "根据类型获取数据分类统计", notes = "必填字段：type")
	@PostMapping("/countList")
	public ApiResult<CategoryCountVO> getCountList(@RequestBody CategoryDTO categoryDTO) {
		return ApiResult.success(categoryService.getCountList(categoryDTO));
	}

	/**
	 * 获取所属行业列表
	 * @return
	 */
	@ApiOperation(value = "获取所属行业List")
	@GetMapping("/getIndustryList")
	public ApiResult<ArrayList<IndustryVO>> getIndustryList(){
		ArrayList<IndustryVO> arrayList = new ArrayList<>();
		for (IndustryEnum industryEnum : IndustryEnum.values()) {
			IndustryVO industryVO = new IndustryVO(industryEnum.getResCode(), industryEnum.getResMsg());
			arrayList.add(industryVO);
		}
		return ApiResult.success(arrayList);
	}

}

